1000 REM * DARKTERM '88 1010 REM * 1670 MODEM FILE SOURCE 1020 REM * 1030 OPEN1,8,15,"S0:D'88.1670":CLOSE1 1040 OPEN2,8,1,"0:D'88.1670" 1050 SYS700 1060 .OPT O2 1070 ; 1080 CHKIN =$FFC6 ; KERNEL EQUATES 1090 CHKOUT =$FFC9 1100 CHRIN =$FFCF 1110 CHROUT =$FFD2 1120 CLRCHN =$FFCC 1130 GETIN =$FFE4 1140 ; 1150 PTR =138 ; TEMPORARY POINTERS 1160 ST =140 1170 PREFIX =930 ; DIALING PREFIX 1180 PRELEN =929 ; PREFIX LENGTH 1190 ; 1200 DETECT =922 ; CARRIER DETECT FLAG 1210 DDELAY =927 ; DIALING DELAY 1220 WDELAY =926 ; CARRIER WAIT DELAY 1230 HDELAY =925 ; ON-HOOK DELAY 1240 ; 1250 *=$4500 ; STARTS HERE UP TO $47FF 1260 ; 1270 JMP ANSWER ; AUTO-ANSWER 1280 JMP DODIAL ; AUTO-DIAL 1290 JMP ONHOOK ; LABEL SAYS ALL 1300 JMP OFHOOK ; OFF HOOK 1310 JMP CARCHK ; LOST CARRIER CHECK 1320 JMP CUSTOM ; USER DEFINED ROUTINE 1330 JMP HANGUP ; HANGUP ROUTINE 1340 ; 1350 DODIAL STX PTR ; X/Y POINT TO DIAL 1360 STY PTR+1 ; STRING (18 DIGITS) 1370 JSR RETURN ; SEND 2 TO BEGIN 1380 LDA HDELAY ; WAIT SOME 1390 JSR WAIT 1400 LDX #5 1410 JSR CHKOUT 1420 LDY #0 1430 DODO1 CPY PRELEN ; CHECK LENGTH 1440 BEQ DODO2 ; BEFORE SENDING IN CASE 1450 LDA PREFIX,Y ; THERE IS NO PREFIX 1460 JSR MODOUT 1470 INY 1480 BNE DODO1 1490 DODO2 LDY #0 1500 DODO3 LDA (PTR),Y ; GET STRING 1510 CMP #32 ; SKIP ALL BLANKS 1520 BEQ DODO4 1530 AND #127 ; MASK FOR ASCII 1540 JSR MODOUT 1550 DODO4 INY 1560 CPY #18 ; DO ALL 18 BYTES 1570 BNE DODO3 1580 LDA #13 ; SEND THE 1590 JSR MODOUT 1600 JSR CLRCHN 1610 LDA WDELAY ; AND WAIT FOR CARRIER 1620 JSR WAIT 1630 LDA 56577 ; HAVE ONE 1640 AND #16 1650 BEQ DODO5 ; YES 1660 SEC ; NOT ABORTED, SET C FLAG 1670 LDA #0 ; NO CARRIER, SET Z FLAG 1680 RTS 1690 DODO5 SEC ; SET C FLAG 1700 LDA #1 ; CARRIER, CLEAR Z FLAG 1710 RTS 1720 ; 1730 WAIT TAX 1740 W0 JSR CLRTIM ; CLEAR TI CLOCK 1750 W1 LDA 145 ; CHECK STOP KEY 1760 CMP #$7F 1770 BEQ W2 ; IF PRESSED, ABORT 1780 LDA 162 1790 CMP #60 ; ONE SECOND 1800 BCC W1 1810 DEX ; X NUMBER OF TIMES 1820 BEQ W3 1830 BNE W0 1840 W2 PLA 1850 PLA 1860 CLC ; CLEAR C FLAG - USER ABORTED 1870 W3 RTS 1880 ; 1890 ONHOOK LDA #70 ; WAIT ONE SEC... 1900 JSR JIFFY 1910 LDX #5 1920 JSR CHKOUT 1930 LDA #"+" ; SEND +++ SEQUENCE 1940 JSR MODOUT 1950 JSR MODOUT 1960 JSR MODOUT 1970 JSR CLRCHN 1980 LDA #70 ; WAIT ONE MORE SEC... 1990 JMP JIFFY 2000 ; 2010 OFHOOK JSR SMART ; OFF-HOOK 2020 .ASC "ATD" 2030 .BYT 13,0 2040 RTS 2050 ; 2060 SMART LDA 56577 ; SEND AT COMMANDS 2070 AND #16 2080 BNE SM1 2090 JSR ONHOOK ; HANG UP UNTIL NO 2100 JMP SMART ; CARRIER 2110 SM1 PLA ; GET STRING ADDRESS FROM 2120 STA ST ; RETURN ADDRESS 2130 PLA 2140 STA ST+1 2150 LDX #5 2160 JSR CHKOUT 2170 LDA #40 ; WAIT >.5 SEC... 2180 JSR JIFFY 2190 SM2 INC ST 2200 BNE SM3 2210 INC ST+1 2220 SM3 LDY #0 2230 LDA (ST),Y ; SEND COMMAND 2240 BEQ SM4 2250 JSR MODOUT 2260 JMP SM2 2270 SM4 JSR CLRCHN 2280 LDA #40 ; WAIT SOME MORE 2290 JSR JIFFY 2300 LDA ST+1 ; PUSH NEW RETURN ADDRESS 2310 PHA 2320 LDA ST 2330 PHA 2340 RTS 2350 ; 2360 MODOUT JSR CHROUT 2370 MODO1 LDX 669 ; WAIT FOR RS232 TO 2380 CPX 670 ; (null) IDLE BEFORE SENDING 2390 BNE MODO1 ; AGAIN 2400 RTS 2410 ; 2420 RETURN LDX #5 2430 JSR CHKOUT 2440 LDA #13 2450 JSR MODOUT 2460 JSR MODOUT 2470 JMP CLRCHN 2480 ; 2490 CUSTOM RTS ; NONE NEEDED FOR 1670 2500 ; 2510 CARCHK BIT DETECT ; IF DETECT IS 2520 BPL CAR1 ; 0 THEN IGNORE CARRIER 2530 LDA $DD01 2540 AND #16 2550 BEQ CAR1 2560 CLC ; DROPPED CARRIER 2570 RTS ; SO CLEAR C FLAG 2580 CAR1 SEC 2590 RTS 2600 ; 2610 CLRTIM LDA #0 2620 STA 160 2630 STA 161 2640 STA 162 2650 RTS 2660 ; 2670 JIFFY TAX ; WAIT SOME JIFFIES 2680 JSR CLRTIM 2690 JIF1 CPX 162 2700 BCS JIF1 2710 RTS 2720 ; 2730 ANSWER JSR RESET ; RESET MODEM 2740 ANS0 JSR SMART ; SEND AT ACK 2750 .ASC "AT" 2760 .BYT 13,0 2770 LDX #5 2780 JSR CHKIN 2790 JSR GETIN 2800 PHA 2810 JSR CLRCHN 2820 PLA 2830 AND #127 2840 CMP #"0" ; WAIT FOR OKAY RESPONSE 2850 BNE ANS0 2860 ANS1 LDX #5 2870 JSR CHKIN 2880 JSR GETIN ; WAIT FOR NUMERICAL 2890 PHA ; RESPONSE 2900 JSR CLRCHN 2910 PLA 2920 AND #127 ; DISCARD BIT 7 2930 CMP #"1" ; 300 BAUD 2940 BEQ ANS2 ; YES 2950 CMP #"5" ; 1200 BAUD 2960 BEQ ANS3 ; YES 2970 JSR GETIN ; GET KEY FROM KEYBOARD 2980 CMP #0 2990 BEQ ANS1 3000 CLC 3010 RTS 3020 ANS2 LDX #<300 3030 LDY #>300 3040 BNE ANS4 3050 ANS3 LDX #<1200 3060 LDY #>1200 3070 ANS4 SEC 3080 RTS 3090 ; 3100 RESET LDA $29B 3110 STA $29C 3120 JSR SMART 3130 .ASC "ATZ" 3140 .BYT 13,0 3150 LDA #75 3160 JSR JIFFY 3170 LDA $29B 3180 STA $29C 3190 JSR SMART 3200 .ASC "AT V0 M0 X1" 3210 .BYT 13,0 3220 LDA #75 3230 JMP JIFFY 3240 ; 3250 HANGUP JSR ONHOOK ; SEND +++ SEQ. 3260 JSR SMART ; SEND COMMAND STRING 3270 .ASC "ATD" 3280 .BYT 13,0 3290 LDA $DD01 3300 AND #16 ; CHECK CARRIER 3310 BEQ HANGUP ; STILL THERE, TRY MORE 3320 LDA $29B 3330 STA $29C 3340 RTS